這是我一直在思考的問題,GCP上自帶Datalab、Jupyter notebook,還有海量的API可以使用,那麼為什麼我會先選擇使用虛擬機來嘗試我的第一步呢? 在討論之前先來談談目標吧!
我們其實只是需要一台運算效能高的電腦
接觸GCP幾天下來,我認為GCP厲害的地方在於可以非常有效地整合運算流。整個系統架構非常地漂亮且舒服 「我把所有的data放在一邊,另一邊的電腦們想要什麼自己去取」。
然而或許是因為剛接觸的關係,我認為在GCP上使用Datalab訪問API還不是很習慣且不方便,對於剛入門的我或許使用VM會更快上手,我現在並不確定VM節點是否能夠訪問API(應該是可以啦~),至少對我而言,直接控制一台電腦會更加地快速且方便。
那麼我們話不多說,開始建立第一個Virtual Machine
在建立VM之前,我們必須先申請一下GPU配額
畢竟...接下來你所看到的GPU可不是什麼1080或是2080這種等級的存在。
GCP
裡面喔~!導覽選單->IAM與管理員->配額
指標
(查找方便)勾選GPU可以看到Computer Engine API
,勾選並編輯配額
1
,打上隨便的理由(? 申請吧!申請完成必須等待mail通知,審核時間1小時-3天不等,通過後再進行下面步驟
導覽選單->Computer Engine->VM執行個體->建立執行個體
貴
啊!!! 他單位是美金阿草如果遇上建立失敗
Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally
代表申請還沒通過,繼續等吧!
建立完成 ! 讓我們Start吧 !
$wget http://repo.continuum.io/archive/Anaconda3-2019.07-Linux-x86_64.sh
$bash Anaconda3-4.0.0-Linux-x86_64.sh
yes/no
問題請達yes
$source ~/.bashrc
$conda install nb_conda
$jupyter notebook --generate-config
$conda create -n tensorflow python=3.6 ipykernel conda
$conda activate tensorflow
$conda install numpy matplotlib tensorflow-gpu
$conda deactivate
$python
$from notebook.auth import passwd
$passwd()
導覽選單->VPC網路->防火牆規則
目標
: 所有執行體來源IP範圍
: 0.0.0.0/0
指定通訊協定
: 設定TCP port(8888)這步驟同配置Anaconda,在你的SSH上執行
而我是在MobaXterm上做的,如果有人感興趣可以在下方留言,我把SOP放在那邊吧!
~/.jupyter/jupyter_notebook_config.py
檔案修改裡面內容
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'<步驟7的那串密碼>'
c.NotebookApp.open_browser = False
興奮的時刻總是來得特別晚
<外部IP>:8888
Computer Engine->VM執行個體
看到進入jupyer notebook後,右邊的new
點一下可以看到我們的虛擬環境tensorflow
請... 毫不猶豫地 點下去
第一個當然是MNIST啊!
接下來請copy-paste
import tensorflow.keras as keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras import backend as K
batch_size = 128
num_classes = 10
epochs = 12
# input image dimensions
img_rows, img_cols = 28, 28
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
靜待結果吧!
等等,這不是用GPU吧? 不管了,今天就先這樣
今天建立了我的第一個VM,定且在VM上成功布置了Anaconda Jupyter Notebook
而且!!可以直接連上作業啦! (耶~! (灑花~!
然後第一個程式從CNN開始,下一個章節打算簡單介紹NN的分類和優化器、LOSS...等基礎的ML知識
Hi 大大: 那個計價的部分我印象中是美金不是台幣喔??
感謝指點Orz... 我用到一半想說怎麼才用個4、5天就要800多台幣,原來如此原來如此 哈哈哈哈
我後來都用自己電腦好了其實 (掩面